package cn.com.datasource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

/**
 * @author liufl E-mail:Huberier@allpyra.com
 * @version 创建时间：2017年8月1日 下午3:30:22
 * 类说明
 */
public class DynamicDataSource extends AbstractRoutingDataSource {
	
	Logger log = LoggerFactory.getLogger(this.getClass().getName());
	
	/*
	 * 当使用ThreadLocal维护变量时，ThreadLocal为每个使用该变量的线程提供独立的变量副本，
	 * 所以每一个线程都可以独立地改变自己的副本，而不会影响其它线程所对应的副本。
	 */
	private static final ThreadLocal<DatabaseEnum> contextHolder = new ThreadLocal<>();

	/**
	 * 指定数据源
	 * 
	 * @param type
	 */
	public static void setDatabaseType(DatabaseEnum type) {
		contextHolder.set(type);
	}

	public static DatabaseEnum getDatabaseType() {
		return contextHolder.get();
	}

	public static void clearDatabaseType() {
		contextHolder.remove();
	}
	
	@Override
    protected Object determineCurrentLookupKey() {
        return getDatabaseType();
    }
}

